Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Node / ReticulumProjects / MeshChatX.git / files / tests / backend / test_notification_unread_semantics.py

Displaying Raw • Download


tests/backend/test_notification_unread_semantics.py bb910f288ba67e1691f7e043dbb1600c947a5112 (bb910f28) Text, 3.24 KB

T8b949e"""
Regression tests for conversation/bell unread semantics: no false positives from
outgoing-latest threads or inconsistent read cursors.
"""

Tff7b72from T7ee787datetime Tff7b72import Te6edf3UTCTb4b4b4, Te6edf3datetime

Tff7b72import T7ee787pytest
Tff7b72from T7ee787hypothesis Tff7b72import Te6edf3givenTb4b4b4, Te6edf3settings
Tff7b72from T7ee787hypothesis Tff7b72import Te6edf3strategies Tff7b72as Te6edf3st

Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787lxmf_utils Tff7b72import Te6edf3compute_lxmf_conversation_unread_from_latest_row


Tff7b72def Td2a8ff_rowTb4b4b4(Te6edf3incomingTb4b4b4, Te6edf3last_read_isoTb4b4b4, Te6edf3tsTb4b4b4)Tb4b4b4:
Tff7b72return Tb4b4b4{
Ta5d6ff"Ta5d6ffis_incomingTa5d6ff"Tb4b4b4: Te6edf3incomingTb4b4b4,
Ta5d6ff"Ta5d6fflast_read_atTa5d6ff"Tb4b4b4: Te6edf3last_read_isoTb4b4b4,
Ta5d6ff"Ta5d6fftimestampTa5d6ff"Tb4b4b4: Te6edf3tsTb4b4b4,
Tb4b4b4}


Tff7b72class T56d364TestComputeLxmfUnreadFromRowTb4b4b4:
Tff7b72def Td2a8fftest_outgoing_never_unreadTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3base_ts Tff7b72= T79c0ff1_700_000_000.0
Tff7b72for Te6edf3last Tff7b72in Tb4b4b4(Tff7b72NoneTb4b4b4, Te6edf3datetimeTff7b72.Td2a8fffromtimestampTb4b4b4(Te6edf3base_ts Tff7b72- T79c0ff1Tb4b4b4, Te6edf3UTCTb4b4b4)Tff7b72.Td2a8ffisoformatTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4:
Tff7b72assert Tb4b4b4(
Te6edf3compute_lxmf_conversation_unread_from_latest_rowTb4b4b4(
Te6edf3_rowTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3lastTb4b4b4, Te6edf3base_tsTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72is Tff7b72False
Tb4b4b4)
Tff7b72assert Tb4b4b4(
Te6edf3compute_lxmf_conversation_unread_from_latest_rowTb4b4b4(
Te6edf3_rowTb4b4b4(Tff7b72FalseTb4b4b4, Te6edf3lastTb4b4b4, Te6edf3base_tsTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72is Tff7b72False
Tb4b4b4)

Tff7b72def Td2a8fftest_incoming_unread_when_no_read_cursorTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72assert Tb4b4b4(
Te6edf3compute_lxmf_conversation_unread_from_latest_rowTb4b4b4(
Te6edf3_rowTb4b4b4(T79c0ff1Tb4b4b4, Tff7b72NoneTb4b4b4, T79c0ff1_700_000_000.0Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72is Tff7b72True
Tb4b4b4)

Tff7b72def Td2a8fftest_incoming_unread_when_bool_trueTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72assert Tb4b4b4(
Te6edf3compute_lxmf_conversation_unread_from_latest_rowTb4b4b4(
Te6edf3_rowTb4b4b4(Tff7b72TrueTb4b4b4, Tff7b72NoneTb4b4b4, T79c0ff1_700_000_000.0Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72is Tff7b72True
Tb4b4b4)

Tf0883e@settingsTb4b4b4(Te6edf3max_examplesTff7b72=T79c0ff200Tb4b4b4)
Tf0883e@givenTb4b4b4(
Te6edf3tsTff7b72=Te6edf3stTff7b72.Td2a8fffloatsTb4b4b4(
Te6edf3min_valueTff7b72=T79c0ff1_000_000_000.0Tb4b4b4,
Te6edf3max_valueTff7b72=T79c0ff2_000_000_000.0Tb4b4b4,
Te6edf3allow_nanTff7b72=Tff7b72FalseTb4b4b4,
Te6edf3allow_infinityTff7b72=Tff7b72FalseTb4b4b4,
Tb4b4b4)Tb4b4b4,
Te6edf3deltaTff7b72=Te6edf3stTff7b72.Td2a8fffloatsTb4b4b4(
Te6edf3min_valueTff7b72=T79c0ff1.0Tb4b4b4,
Te6edf3max_valueTff7b72=T79c0ff86_400.0Tb4b4b4,
Te6edf3allow_nanTff7b72=Tff7b72FalseTb4b4b4,
Te6edf3allow_infinityTff7b72=Tff7b72FalseTb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_incoming_newer_than_read_always_unreadTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3tsTb4b4b4, Te6edf3deltaTb4b4b4)Tb4b4b4:
Te6edf3read_at Tff7b72= Te6edf3datetimeTff7b72.Td2a8fffromtimestampTb4b4b4(Te6edf3ts Tff7b72- Te6edf3deltaTb4b4b4, Te6edf3UTCTb4b4b4)Tff7b72.Td2a8ffisoformatTb4b4b4(Tb4b4b4)
Tff7b72assert Tb4b4b4(
Te6edf3compute_lxmf_conversation_unread_from_latest_rowTb4b4b4(
Te6edf3_rowTb4b4b4(T79c0ff1Tb4b4b4, Te6edf3read_atTb4b4b4, Te6edf3tsTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72is Tff7b72True
Tb4b4b4)

Tf0883e@settingsTb4b4b4(Te6edf3max_examplesTff7b72=T79c0ff200Tb4b4b4)
Tf0883e@givenTb4b4b4(
Te6edf3tsTff7b72=Te6edf3stTff7b72.Td2a8fffloatsTb4b4b4(
Te6edf3min_valueTff7b72=T79c0ff1_000_000_100.0Tb4b4b4,
Te6edf3max_valueTff7b72=T79c0ff2_000_000_000.0Tb4b4b4,
Te6edf3allow_nanTff7b72=Tff7b72FalseTb4b4b4,
Te6edf3allow_infinityTff7b72=Tff7b72FalseTb4b4b4,
Tb4b4b4)Tb4b4b4,
Te6edf3deltaTff7b72=Te6edf3stTff7b72.Td2a8fffloatsTb4b4b4(
Te6edf3min_valueTff7b72=T79c0ff0.001Tb4b4b4,
Te6edf3max_valueTff7b72=T79c0ff86_400.0Tb4b4b4,
Te6edf3allow_nanTff7b72=Tff7b72FalseTb4b4b4,
Te6edf3allow_infinityTff7b72=Tff7b72FalseTb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_incoming_older_or_equal_read_never_unreadTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3tsTb4b4b4, Te6edf3deltaTb4b4b4)Tb4b4b4:
Te6edf3read_at Tff7b72= Te6edf3datetimeTff7b72.Td2a8fffromtimestampTb4b4b4(Te6edf3ts Tff7b72+ Te6edf3deltaTb4b4b4, Te6edf3UTCTb4b4b4)Tff7b72.Td2a8ffisoformatTb4b4b4(Tb4b4b4)
Tff7b72assert Tb4b4b4(
Te6edf3compute_lxmf_conversation_unread_from_latest_rowTb4b4b4(
Te6edf3_rowTb4b4b4(T79c0ff1Tb4b4b4, Te6edf3read_atTb4b4b4, Te6edf3tsTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72is Tff7b72False
Tb4b4b4)


Tf0883e@pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffparametrizeTb4b4b4(
Tb4b4b4(Ta5d6ff"Ta5d6ffincomingTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffexpect_unreadTa5d6ff"Tb4b4b4)Tb4b4b4,
Tb4b4b4[
Tb4b4b4(T79c0ff0Tb4b4b4, Tff7b72FalseTb4b4b4)Tb4b4b4,
Tb4b4b4(T79c0ff1Tb4b4b4, Tff7b72TrueTb4b4b4)Tb4b4b4,
Tb4b4b4]Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_sqlite_integer_incoming_flagsTb4b4b4(Te6edf3incomingTb4b4b4, Te6edf3expect_unreadTb4b4b4)Tb4b4b4:
Te6edf3row Tff7b72= Te6edf3_rowTb4b4b4(Te6edf3incomingTb4b4b4, Tff7b72NoneTb4b4b4, T79c0ff1_700_000_000.0Tb4b4b4)
Tff7b72assert Te6edf3compute_lxmf_conversation_unread_from_latest_rowTb4b4b4(Te6edf3rowTb4b4b4) Tff7b72is Te6edf3expect_unread


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────